<template>
  <div id="app">
    <img src="./assets/logo.png" alt="">
   <about-vue-comp></about-vue-comp>
   <div id="aboutvuecompcontstrutor"></div>
   <JsComponent></JsComponent>
   <JsImgCompent :imgsrc="imgsrc"></JsImgCompent>
   <button @click="loadImg">加载.js形式的图片组件</button>
   <JsCompConstructor></JsCompConstructor>
  </div>
</template>

<script>
// 到处的是也普通的js对象.包裹 template 模板 data 等属性
import Vue from 'vue'
// 导入一个.vue文件的模板
import AboutVueComp from './components/about' 
// 查看实际导出的数据
// console.log('AboutVueComp',AboutVueComp) // object 
const AboutVueCompConstructor = Vue.extend(AboutVueComp)
// console.log('AboutVueCompConstructor',AboutVueCompConstructor)

import JsComponent from './components/js-component'
import JsImgCompent from './components/js-img-comp'
import JsCompConstructor from './components/js-comp-constructor'


// const JsCompConstructor = Vue.extend(JsComponent) // 通过组件对象,返回组件对象的构造函数 f VueComponent() {}
// const JsImgCompConstructor = Vue.extend(JsImgCompent) // obj -> Vue.extend(obj) -> Constructor -> new Constructor -> 组件实例

export default {
  name: 'app',
  data () {
    return {
      msg: 'Welcome to Your Vue.js App',
      imgsrc: ""
    }
  },
  components: {
    AboutVueComp, // 等价于 Vue.extend(AboutVueComp) 生成一个用于构建组件的构造函数 new AboutVueComp()
    JsComponent, // 传递的是options
    JsImgCompent , // 传递的是options 普通对象,
    JsCompConstructor, // 传递的是通过Vue.extend(options)之后的组件构造函数
  },
  methods: {
    loadImg () {
      // debugger // 可以让执行环境卡在这里.
      this.imgsrc = '/dist/logo.png?82b9c7a5a3f405032b1db71a25f67021' // 因为不参与编译,这里需要些编译后的图片地址.
    }
  },
  mounted() {
    new AboutVueCompConstructor().$mount('#aboutvuecompcontstrutor')
  },  
}
</script>

<style lang="scss">
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}

h1, h2 {
  font-weight: normal;
}

ul {
  list-style-type: none;
  padding: 0;
}

li {
  display: inline-block;
  margin: 0 10px;
}

a {
  color: #42b983;
}
</style>
